浏览器功能定制4:qutebrowser userscipts机制及自带readability
userscipts
qutebrowser 浏览支持用户编写脚本进行扩展,即 userscipts 机制。
基于 userscipts,用户可以为浏览器添加新功能,比如:
- 生成二维码(调用系统
qrencode
命令) - 阅读模式(基于 readability/breadability/readability-js 库)
- 打通 taskwarrior,添加 Todo
如何理解 userscipts 呢?
首先它就是普通的 Linux 脚本,以 shebang 作为脚本的开头,由操作系统来执行。因此脚本可以是任何语言,比如 Shell、Python、JavaScript……主要看你的操作系统都装了啥,与 qutebrowser 无关。
用户需要事先将 userscipts 放入家目录下的指定目录中。在 qutebrowser 中,通过 :spawn --userscript
进行调用。
在调用时,qutebrowser 会将网页相关信息存储到一系列环境变量中,脚本在执行的时候,通过环境变量访问到网页上下文,比如 URL、HTML 代码。
当脚本执行完成后,可以通过 QUTE_FIFO
环境变量向 qutebrowser 回发命令,命令的格式与 qutebrowser 的命令系统一致,后者会按照命令进行执行。
readability userscipts
这里以 readability 为例,详细介绍 userscipts,并介绍如何在 qutebrowser,基于 readability userscipts 实现阅读模式。
qutebrowser 的源码仓库中自带一些 userscipts,readability 便是其中之一,位于 misc\userscripts\
目录下。
准确来说,有两个脚本:
- readability:Python 版本
- readability-js:Node 版本
其中,涉及到 3 个 readability 库:
- python-readability
- 2.4k,Python 库,活跃维护
- breadability
- 203 star,Python 库
- 最后维护 2018 年
- mozilla/readability:
- 6.6k,Node 库
- mozilla 官方维护,活跃更新
- Firefox Reader View 同款
综合来看,mozilla/readability 是最香的,能获得 Firefox 同款。python-readability 看起来是 JavaScript 向 Python 的一个 Port。
不论是 Python 版,还是 JavaScript 版,readability userscipts 的实现思路都是一样的:
首先会预置一段 HTML 模板,用于最最精简的网页结构。
脚本通过 QUTE_HTML
环境变量获取到 HTML 代码,将 HTML 传入 Readability 库。
调用 Readability 的解析方法,它将根据其内部算法,执行正文提取工作。
之后,将提取后的正文,拼入 HTML 模板中,得到一篇阅读模式文章,写入到一个临时文件中。
最后,通过 QUTE_FIFO
命令回传一个 open 命令,告诉 qutebrowser 打开这个本地文件即可。
其中,还有一个 qutejs Node 库,方便调用 qutebrowser 命令。
网络资源
本文作者:Maeiee
本文链接:浏览器功能定制4:qutebrowser userscipts机制及自带readability
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!